﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Librerias;


namespace eCampus
{
    /// <summary>
    /// Formulacio para crear materiales
    /// </summary>
    public partial class FormMaterialCrear : Form
    {
        /// <summary>
        /// variables
        /// </summary>
        ENMaterial en;
        bool esModificar;
        FormMaterialConsultar anterior;

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="Material">Objeto a crear/modificar</param>
        /// <param name="padre">Instancia al padre. Se usa para comprobar que no exista el fichero</param>
        /// <param name="modificar">Si es modificar -> true, si no lo es no se pone nada</param>
        public FormMaterialCrear(ENMaterial Material,FormMaterialConsultar padre, bool modificar = false)
        {
            en = Material;
            esModificar = modificar;
            InitializeComponent();
            anterior = padre;

            if (modificar)
            {
                tbTitulo.Text = en.Titulo;
                tbDescripcion.Text = en.Descripcion;
                tbArchivo.Text = en.Archivo;
                tbArchivo.ReadOnly = true;
                btOk.Text = "Actualizar";
                btExplorarODescargar.Text = "Descargar";
            }
        }

        /// <summary>
        /// Obtiene el nombre a partir de una ruta
        /// Ej: C:\carpeta\fichero.exe -> fichero.exe
        /// </summary>
        /// <param name="ruta">Ruta a descapullar</param>
        /// <returns>Nombre del fichero</returns>
        public static string GetFicheroFromRuta(string ruta)
        {
            string[] aux = ruta.Split('\\');

            if (aux.Length > 1) return aux[aux.Length - 1];
            else return "";

        }


        /// <summary>
        /// Función para crear o modificar un nuevo material
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btOk_Click(object sender, EventArgs e)
        {
            //Comprueba que no exista en esta carpeta un fichero con el mismo nombre
            if (anterior.NoExisteNombre(GetFicheroFromRuta(tbArchivo.Text)))
            {
                //Modificar el fichero
                if (esModificar)
                {
                    try
                    {
                        en.Titulo = tbTitulo.Text;
                        en.Descripcion = tbDescripcion.Text;
                        en.Archivo = tbArchivo.Text;
                        en.Modificar();
                        Close();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Error al actualizar el fichero", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
                //Crear nuevo fichero
                else
                {
                    try
                    {
                        en.Titulo = tbTitulo.Text;
                        en.Descripcion = tbDescripcion.Text;
                        en.Archivo = tbArchivo.Text;
                        progressBar1.Visible = true;
                        en.Alta(progressBar1);
                        Close();
                    }
                    catch (Exception x)
                    {
                        MessageBox.Show("Error al subir el fichero\r\n" + x.Source + "\r\n" + x.StackTrace, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                    progressBar1.Visible = false;
                }
            }
            else MessageBox.Show("Ya existe un archivo con este nombre", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }

        /// <summary>
        /// Función para subir un nuevo fichero o descargar uno existente
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btExplorarODescargar_Click(object sender, EventArgs e)
        {
            //Si es modificar, descarga
            if (esModificar)
            {
                SaveFileDialog dialogoDescarga = new SaveFileDialog();
                dialogoDescarga.Title = "Descargar";
                dialogoDescarga.FileName = en.Archivo;
                if (dialogoDescarga.ShowDialog() == DialogResult.OK)
                {
                    en.Descargar(en.Ruta + en.Archivo, dialogoDescarga.FileName.Substring(0, dialogoDescarga.FileName.LastIndexOf("\\")));
                }
            }
            //Si es crear, sube
            else
            {
                OpenFileDialog dialogoSubir = new OpenFileDialog();
                if (dialogoSubir.ShowDialog() == DialogResult.OK)
                {
                    tbArchivo.Text = dialogoSubir.FileName;
                }
            }
        }

    }
}
